package com.xique.park.controller.web;

import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.xique.common.core.domain.R;
import com.xique.common.core.utils.SecurityUtils;
import com.xique.common.core.web.domain.PageResult;
import com.xique.common.security.annotation.PreAuthorize;
import com.xique.park.service.service.IParkStatisticsInOutService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 车次统计报表功能
 *
 * @author guolingling
 */
@Slf4j
@RequiredArgsConstructor
@RestController
@RequestMapping("/web/inOrOut")
public class WebParkStatisticsInOutController {

    private final IParkStatisticsInOutService parkStatisticsInOutService;

    /**
     * 初始化车次统计报表
     */
    @PostMapping("/init")
    public R<String> init(Boolean initAll) {
        log.info("[车次统计]-初始化车次统计报表，开始时间：{}", DateUtil.now());
        if (Boolean.TRUE.equals(initAll)) {
            // 初始化全部
            parkStatisticsInOutService.initParkStatisticsInOut(null);
        } else {
            // 初始化当前项目
            parkStatisticsInOutService.initParkStatisticsInOut(SecurityUtils.getParkId());
        }
        log.info("[车次统计]-初始化车次统计报表，结束时间：{}", DateUtil.now());
        return R.ok();
    }

    /**
     * 统计昨天的车次
     */
    @PostMapping(value = "/yesterdayStatisticsInOut")
    public R<String> yesterdayStatisticsInOut() {
        log.info("[车次统计]-统计昨天的车次，开始时间：{}", DateUtil.now());
        DateTime yesterday = DateUtil.yesterday();
        String day = DateUtil.format(yesterday, DatePattern.NORM_DATE_PATTERN);
        parkStatisticsInOutService.statisticsInOutByDay(day);
        log.info("[车次统计]-统计昨天的车次，结束时间：{}", DateUtil.now());
        return R.ok();
    }

    /**
     * 统计指定日期的车次
     *
     * @param day 指定日期 - yyyy-MM-dd
     */
    @PostMapping(value = "dayStatisticsInOut")
    public R<String> dayStatisticsInOut(String day) {
        log.info("[车次统计]-统计指定日期的车次，day：{}，开始时间：{}", day, DateUtil.now());
        parkStatisticsInOutService.statisticsInOutByDay(day);
        log.info("[车次统计]-统计指定日期的车次，结束时间：{}", DateUtil.now());
        return R.ok();
    }

    /**
     * 车次统计报表
     *
     * @param type      查询类型 （1：日，2：月，3：年）
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @param pageNum   当前页数
     * @param pageSize  每页数量
     */
    @PreAuthorize(hasPermi = "project:excels:query")
    @GetMapping("/inOutStatistics")
    public R<PageResult> inOutStatistics(Integer type, String startTime, String endTime, Integer pageNum, Integer pageSize) {
        long parkId = SecurityUtils.getParkId();
        pageNum = pageNum != null ? pageNum : 1;
        pageSize = pageSize != null ? pageSize : 10;
        PageResult result = parkStatisticsInOutService.getParkStatisticsInOut(parkId, type, startTime, endTime, pageNum, pageSize);
        return R.ok(result);
    }

}
